import matplotlib.pyplot as plt
import pandas as pd
import re
import matplotlib as mpl
from openpyxl import *
from matplotlib.font_manager import FontProperties
from collections import defaultdict

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows 中文支持
plt.rcParams['axes.unicode_minus'] = False    # 正确显示负号

def generate_workflow_report(workflow_df):
    # 生成日志报告 Excel
    r_excel = Workbook()

    # 移除默认创建的第一个工作表（可选）
    default_sheet = r_excel.active
    r_excel.remove(default_sheet)

    # 创建第一个工作表
    sales_sheet = r_excel.create_sheet(title="人脸注册")

    # TODO: 使用 WorkBook 创建自定义的 Excel 文件，每个 step 中间添加空白行；
    # TODO: 添加其他表格（掌静脉添加、掌静脉识别、人脸识别）

    # 生成详细数据表
    detailed_df = pd.json_normalize(workflow_df.to_dict('records'))

    # 定义列名映射关系（英文列名 -> 中文别名）
    column_mapping = {}

    # 处理步骤相关的列名（动态生成的）
    step_columns = [col for col in detailed_df.columns if col.startswith('step')]

    for col in step_columns:
        # 提取步骤编号和字段名（如 'steps.1.status'）
        parts = col.split('.')

        if len(parts) == 3:
            step_num = parts[1]
            field = parts[2]

            # 为不同字段设置中文别名
            if field == 'status':
                column_mapping[col] = f'状态'
            elif field == 'error_desc':
                column_mapping[col] = f'备注'
            elif field == 'ret_code':
                column_mapping[col] = f'返回码'
            elif field == 'timestamp':
                column_mapping[col] = f'{step_num}'
            else:
                column_mapping[col] = f'{field}'

    # 重命名列
    detailed_df = detailed_df.rename(columns=column_mapping)

    # 删除所有列名包含"状态"的列（因为status被映射为"状态"）
    detailed_df = detailed_df.drop(columns=[col for col in detailed_df.columns if '状态' in col])

    # 使用 openpyxl 引擎保存 Excel
    detailed_df.to_excel('face_add_details.xlsx', index=False, engine='openpyxl')

    return detailed_df
